
#define __host__
#define __device__
#include <vector_types.h>

#include <algorithm/analytical_model/algorithm/cuda/grid/Grid.cuh>
#include <algorithm/analytical_model/algorithm/cuda/inter_op/grid/Grid.h>
#include <utils/Utils.h>

#include <memory>

using namespace solar::cuda::inter_op;

// Grid::Grid()
// {
//     this->delegate_ptr_ = std::make_shared<solar::cuda::Grid>();
// }

auto Grid::getType() const -> GridType { return this->delegate_ptr_->type_; }

auto Grid::getPosition() const -> Float3 { return structCopy<Float3>(this->delegate_ptr_->pos_); }

void Grid::setPosition(const Float3& pos) const { structCopy(pos, this->delegate_ptr_->pos_); }

auto Grid::getSize() const -> Float3 { return structCopy<Float3>(this->delegate_ptr_->size_); }

void Grid::setSize(const Float3& size) const { structCopy(size, this->delegate_ptr_->size_); }

auto Grid::getInterval() const -> Float3
{
    return structCopy<Float3>(this->delegate_ptr_->interval_);
}

void Grid::setInterval(const Float3& interval) const
{
    structCopy(interval, this->delegate_ptr_->interval_);
}

auto Grid::getNumHeliostats() const -> int { return this->delegate_ptr_->num_helios_; }

void Grid::setNumHeliostats(int num) const { this->delegate_ptr_->num_helios_ = num; }

auto Grid::getBelongingReceiverIndex() const -> int
{
    return this->delegate_ptr_->belonging_receiver_index_;
}

void Grid::setBelongingReceiverIndex(int index) const
{
    this->delegate_ptr_->belonging_receiver_index_ = index;
}

auto Grid::getStartHeliostatIndex() const -> int { return this->delegate_ptr_->start_helio_index_; }

void Grid::setStartHeliostatIndex(int index) const
{
    this->delegate_ptr_->start_helio_index_ = index;
}
